// @ts-nocheck - Winston 类型定义问题，不影响实际运行
import { utilities as nestWinstonModuleUtilities } from 'nest-winston';
import * as winston from 'winston';
import 'winston-daily-rotate-file';

// 日志目录
const logDir = 'logs';

// 生产环境日志格式（JSON）
const productionFormat = winston.format.combine(
  winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
  winston.format.errors({ stack: true }),
  winston.format.json(),
) as winston.Logform.Format;

// 开发环境日志格式（彩色）
const developmentFormat = winston.format.combine(
  winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
  nestWinstonModuleUtilities.format.nestLike('生活记API', {
    colors: true,
    prettyPrint: true,
  }),
) as winston.Logform.Format;

// 应用日志（所有级别）
const applicationLogTransport = new (winston.transports as any).DailyRotateFile(
  {
    dirname: logDir,
    filename: 'application-%DATE%.log',
    datePattern: 'YYYY-MM-DD',
    zippedArchive: true, // 自动压缩旧日志
    maxSize: '10m', // 单个文件最大 10MB
    maxFiles: '14d', // 保留 14 天
    format: productionFormat,
  },
);

// 错误日志（只记录错误）
const errorLogTransport = new (winston.transports as any).DailyRotateFile({
  dirname: logDir,
  filename: 'error-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxSize: '10m',
  maxFiles: '30d', // 错误日志保留 30 天
  level: 'error',
  format: productionFormat,
});

// 根据环境选择格式
const isDevelopment = process.env.NODE_ENV !== 'production';

export const winstonConfig = {
  transports: [
    // 控制台输出
    new winston.transports.Console({
      format: isDevelopment ? developmentFormat : productionFormat,
    }),
    // 文件日志（所有环境都启用）
    applicationLogTransport,
    errorLogTransport,
  ],
};
